package org.ehe.finance.payable.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ehe.common.mybatis.core.domain.BaseEntity2;

import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 应付账款主表
 * @author :zhangnn
 * @className :ErpFinancePayable
 * @description: TODO
 * @date 2025-09-02 10:03:13
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("erp_finance_payable")
public class ErpFinancePayable extends BaseEntity2 {
    /**
     * 主键ID
     * 自增类型，数据库表的主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 单据编号
     * 应付账款单据的唯一编号，用于标识单据
     */
    @TableField("bill_no")
    private String billNo;

    /**
     * 供应商ID
     * 关联的供应商主键，用于关联供应商信息
     */
    @TableField("supplier_id")
    private Long supplierId;

    /**
     * 单据日期
     * 应付账款单据的创建日期，JSON序列化时格式化为yyyy-MM-dd
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("bill_date")
    private LocalDate billDate;

    /**
     * 单据类型
     * 标识应付账款的类型（如采购应付、费用应付等），存储为数字编码
     */
    @TableField("bill_type")
    private Integer billType;

    /**
     * 单据类型名称
     * 非数据库字段，用于显示单据类型的中文名称（如"采购应付"）
     */
    @TableField(exist = false)  // 标识该字段不在数据库表中存在
    private String billTypeName;

    /**
     * 源单据编号
     * 关联的源头单据编号（如采购单编号），用于追溯来源
     */
    @TableField("source_bill_no")
    private String sourceBillNo;

    /**
     * 总金额
     * 应付账款的总金额
     */
    @TableField("total_amount")
    private BigDecimal totalAmount;

    /**
     * 已付金额
     * 已经支付的金额
     */
    @TableField("paid_amount")
    private BigDecimal paidAmount;

    /**
     * 未付金额
     * 尚未支付的金额（总金额 - 已付金额）
     */
    @TableField("unpaid_amount")
    private BigDecimal unpaidAmount;

    /**
     * 到期日期
     * 应付账款的最晚支付日期，JSON序列化时格式化为yyyy-MM-dd
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("due_date")
    private LocalDate dueDate;

    /**
     * 币种ID
     * 关联的币种主键，用于标识交易的币种（如人民币、美元等）
     */
    @TableField("currency_id")
    private Long currencyId;

    /**
     * 汇率
     * 该币种相对于本位币的汇率，用于金额换算
     */
    @TableField("exchange_rate")
    private BigDecimal exchangeRate;

    /**
     * 部门ID
     * 关联的部门主键，标识该应付账款所属的部门
     */
    @TableField("department_id")
    private Long departmentId;

    /**
     * 采购人员ID
     * 关联的采购人员主键，标识负责该笔应付账款的采购人员
     */
    @TableField("purchaser_id")
    private Long purchaserId;

    /**
     * 结算状态
     * 应付账款的结算状态（如未结算、部分结算、已结算等），存储为数字编码
     */
    @TableField("settlement_status")
    private Integer settlementStatus;

    /**
     * 结算状态名称
     * 非数据库字段，用于显示结算状态的中文名称（如"已结算"）
     */
    @TableField(exist = false)
    private String settlementStatusName;

    /**
     * 备注
     * 存储应付账款的额外说明信息
     */
    @TableField("remark")
    private String remark;

    /**
     * 创建部门ID
     * 关联的创建部门主键，标识创建该应付账款单据的部门
     */
    @TableField("create_dept")
    private Long createDept;
}
